<!DOCTYPE HTML>
<html>
<head>
<title>脚本性能 | AutoHotkey v1</title>
<meta name="description" content="Learn how to maximize the performance of a script and which internal optimizations are processed in favor of performance." />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>

<body>
<h1>脚本性能</h1>

<p>要让性能最佳化, 请避免使用 SetFormat(不包括<a href="../lib/SetFormat.htm#Fast">快速模式</a>) 并且在每个脚本的顶部附近加上下面的这些行:</p>
<pre><a href="../lib/_NoEnv.htm">#NoEnv</a>
<a href="../lib/SetBatchLines.htm">SetBatchLines -1</a>
<a href="../lib/ListLines.htm">ListLines Off</a></pre>
<p>此外, 根据脚本的内容下面的命令可能同样会影响性能: <a href="../lib/SendMode.htm">SendMode</a>, <a href="../lib/SetKeyDelay.htm">SetKeyDelay</a>, <a href="../lib/SetMouseDelay.htm">SetMouseDelay</a>, <a href="../lib/SetWinDelay.htm">SetWinDelay</a>, <a href="../lib/SetControlDelay.htm">SetControlDelay</a> 和 <a href="../lib/SetDefaultMouseSpeed.htm">SetDefaultMouseSpeed</a>.</p>
<h2 id="Built-in_Performance_Features">内置性能特性</h2>
<p>在加载和语法检查每个脚本时, 会对它们进行半编译. 这样除了可以减少内存消耗外, 还可以极大地提高运行时的性能.</p>
<p>下面是优化过程(半编译) 的技术细节:</p>
<ul>
  <li>把输入和输出变量(当它们的名称不包含到其他变量的引用时) 和<a href="../lib/GroupAdd.htm">组</a>名解析为内存地址.</li>
  <li>为 <a href="../lib/Loop.htm">Loop</a>, <a href="../lib/Block.htm">区块</a>, <a href="../lib/IfExpression.htm">IFs (表达式)</a>, <a href="../lib/IfEqual.htm">IFs (传统)</a> 和 <a href="../lib/Else.htm">ELSE</a> 提供它们在脚本中相关跳转点的内存地址.</li>
  <li>把每个<a href="../Hotkeys.htm">热键</a>,<a href="../lib/Gosub.htm"> Gosub</a> 和 <a href="../lib/Goto.htm">Goto</a> 的目标解析为内存地址, 除非它是变量.</li>
  <li>使用跳转表把每个命令名替换为地址.</li>
  <li>把每行预解析成参数列表, 且把每个参数预解析成<a href="../Variables.htm">变量</a>列表(如果有).</li>
  <li>标记化每个<a href="../Variables.htm#Expressions">表达式</a>且把它们从中缀转到后缀.</li>
  <li>把每个到<a href="../Variables.htm">变量</a>或<a href="Functions.htm">函数</a>的引用解析为内存地址.</li>
  <li>把表达式和数学/比较命令中的原义整数替换成二进制整数.</li>
</ul>
<p>此外, 在脚本执行期间, 对二进制数进行缓存以避免和字符串之间的相互转换. 请参阅 <a href="../lib/SetFormat.htm#Fast">SetFormat</a> 了解详情.</p>
</body>
</html>